﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace uacars
{
    public partial class frmVehiculos : Form
    {
        public string path="";

        private ENLibraryClass.ENProductos ENProductos1;
        
        public frmVehiculos()
        {
            InitializeComponent();
        }

        private void frmProductos_Load(object sender, EventArgs e)
        {
            ENLibraryClass.ENProductos vehiculos = new ENLibraryClass.ENProductos();
            DataTable table = vehiculos.BuscarVehiculo();
            dgvVehiculos.DataSource = table;
            ModificarProducto.Enabled = false; 
            BorrarProducto.Enabled = false;
            
        }

        private void archivoToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void buttonModificar_Click(object sender, EventArgs e)
        {
            if ((matricula.Text == "") && (marca.Text == "") && (modelo.Text == "") && (categoria.Text == ""))
            {
                MessageBox.Show("Para realizar una modificacion tiene que haber al menos un campo relleno", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                try
                {
                    float pAlq = (float)precioAlquiler.Value;
                    float pVent = (float)precioVenta.Value;
                    ENProductos1 = new ENLibraryClass.ENProductos(int.Parse(Id.Text), matricula.Text, marca.Text, modelo.Text, categoria.Text, color.Text, pAlq, pVent,path);

                    ENProductos1.ModificarVehiculo();
                    dgvVehiculos.DataSource = ENProductos1.BuscarVehiculo();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error al modificar Vehiculo. Este Vehiculo ya existe.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

                }
                ModificarProducto.Enabled = false;
                BorrarProducto.Enabled = false;
                label.Text = "Modificacion Realizada";

                ficheros f = new ficheros();
                //f.EscribirLog(2, 2, matricula.Text.ToString());
            }
        }

        private void desactivarBuscar()
        {
            /*buttonBuscar = true;
            if (textMatricula.Text.Length == 0 && comboColor.Text.Length == 0 && 
              textMarca.Text.Length == 0 && textPrecioAlquiler.Text.Length == 0 &&
                 textModelo.Text.Length == 0 && textPrecioVenta.Text.Length == 0)
              buttonBuscar.Enabled = false;
             }*/
        }
        

        private void pictureBox2_Click(object sender, EventArgs e)
        {
            colorDialog1.ShowDialog();
            color.BackColor = colorDialog1.Color;
        }

        private void Limpiar_Click(object sender, EventArgs e)
        {
            LimpiarCampos();
        }

        public void LimpiarCampos()
        {
            label = null;
            Id.Text = null;
            matricula.Clear();
            marca.Text = null;
            modelo.Clear();
            categoria.Text = null;
            color.Text = null;
            precioAlquiler.Value = 0;
            precioVenta.Value = 0;
        }

        private void AltaProducto_Click(object sender, EventArgs e)
        {
            bool ok = true;
           string patronMatricula = @"^\d{4}[A-Za-z][A-Za-z][A-Za-z]$";
            if (matricula.Text == "")
            {
                MessageBox.Show("Debes introducir el Numero de matricula", "Error");
                ok = false;
            }
            else if (!Regex.Match(matricula.Text, patronMatricula).Success)
            {
                MessageBox.Show("Debes introducir bien la matricula:1234AAA", "Error");
                ok = false;
            }
            else if (marca.Text == "")
            {
                MessageBox.Show("Debes introducir el la marca del vehiculo", "Error");
                ok = false;
            }
            else if (modelo.Text == "")
            {
                MessageBox.Show("Debes introducir el el modelo del vehiculo", "Error");
                ok = false;
            }
            else if (categoria.Text == "")
            {
                MessageBox.Show("Debes introducir el la categoria del vehiculo", "Error");
                ok = false;
            }
            else if (precioAlquiler.Text == "")
            {
                MessageBox.Show("Debes introducir el precio de alquiler del vehiculo", "Error");
                ok = false;
            }
            else if (precioVenta.Text == "")
            {
                MessageBox.Show("Debes introducir el precio de venta del vehiculo", "Error");
                ok = false;
            }
            try
            {
                if (ok == true)
                {
                    
                    float tmp1 = (float)precioAlquiler.Value;
                    float tmp2 = (float)precioVenta.Value;
                    ENLibraryClass.ENIdSiguiente idsiguiente = new ENLibraryClass.ENIdSiguiente("vehiculos", 0);
                    int idVehiculo = idsiguiente.BuscarIdSiguiente();
                    ENLibraryClass.ENProductos nuevo = new ENLibraryClass.ENProductos(idVehiculo, matricula.Text, marca.Text, modelo.Text, categoria.Text, color.ToString(), tmp1, tmp2,path);
                    nuevo.AltaVehiculo();
                    DataTable table = nuevo.BuscarVehiculo();
                    dgvVehiculos.DataSource = table;
                    idsiguiente.ActualizarIdSiguiente();
                    label.Text = "Alta Realizada";
                    BorrarProducto.Enabled = false;
                    ModificarProducto.Enabled = false;


                    ficheros f = new ficheros();
                    f.EscribirLog(0, 2, idVehiculo.ToString());
                     
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error al dar de alta el vehiculo.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

            }

        }

        private void BuscarProductos_Click(object sender, EventArgs e)
        {
            if ((matricula.Text == "") && (marca.Text == "") && (modelo.Text == "") && (categoria.Text == "") && (precioAlquiler.Value ==0) && (precioVenta.Value==0))
            {
                ENLibraryClass.ENProductos buscado = new ENLibraryClass.ENProductos();
                DataTable tabla = buscado.BuscarVehiculo();
                dgvVehiculos.DataSource = tabla;
                label.Text = "Búsqueda Realizada";

            }
            else
            {
                

                if(true)
                {
                    try
                    {
                        float pAlq = (float)precioAlquiler.Value;
                        float pVent = (float)precioVenta.Value;
                        ENLibraryClass.ENProductos buscado = new ENLibraryClass.ENProductos(int.Parse(Id.Text), matricula.Text, marca.Text, modelo.Text, categoria.Text, color.Text, pAlq, pVent,imagen.ToString());
                        DataTable table = buscado.BuscarVehiculoPor();
                        dgvVehiculos.DataSource = table;
                        label.Text = "Búsqueda Realizada";
                                                                                                        
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error al buscar el Vehiculo.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

                    }
                }
            }

        }

        private void BorrarProducto_Click(object sender, EventArgs e)
        {
            if (matricula.Text == "")
            {
                MessageBox.Show("La matricula no puede ser un campo vacio", "Error",MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                try
                {


                    ENLibraryClass.ENProductos borrado = new ENLibraryClass.ENProductos(int.Parse(Id.Text), matricula.Text, null, null, "", null, 0.0F, 0.0F, null);

                    borrado.BorrarVehiculo();

                    float pAlq = (float)precioAlquiler.Value;
                    float pVent = (float)precioVenta.Value;
                    dgvVehiculos.DataSource = borrado.BuscarVehiculo();
                    label.Text = "Borrado Realizado";

                    ficheros f = new ficheros();
                    f.EscribirLog(1, 2, matricula.Text.ToString());
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error al borrar el Vehiculo.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

                }
                BorrarProducto.Enabled = false;
                ModificarProducto.Enabled = false;
            }
        }
        
        private void SelIm_Click(object sender, EventArgs e)
        {
            frmImagenes imagenes = new frmImagenes();
            imagenes.ShowDialog();
            path = imagenes.textBox1.Text;
            if (path != "")
            {
                WebRequest webreq = WebRequest.Create(path);
                WebResponse webres = webreq.GetResponse();
                Stream stream = webres.GetResponseStream();

                imagen.Image = Image.FromStream(stream);
                stream.Close();
            }
            
         }

        private void dgvVehiculos_CellMouseClick_1(object sender, DataGridViewCellMouseEventArgs e)
        {
            ModificarProducto.Enabled = true;
            BorrarProducto.Enabled = true;
            dgvVehiculos.CurrentRow.Selected = true;
            matricula.Text = dgvVehiculos.Rows[dgvVehiculos.CurrentCell.RowIndex].Cells["matricula"].Value.ToString();
            Id.Text = dgvVehiculos.Rows[dgvVehiculos.CurrentCell.RowIndex].Cells["id"].Value.ToString();

            marca.Text = dgvVehiculos.Rows[dgvVehiculos.CurrentCell.RowIndex].Cells["marca"].Value.ToString();
            modelo.Text = dgvVehiculos.Rows[dgvVehiculos.CurrentCell.RowIndex].Cells["modelo"].Value.ToString();
            categoria.Text = dgvVehiculos.Rows[dgvVehiculos.CurrentCell.RowIndex].Cells["categoria"].Value.ToString();
            color.Text= dgvVehiculos.Rows[dgvVehiculos.CurrentCell.RowIndex].Cells["color"].Value.ToString();

            precioAlquiler.Value = decimal.Parse(dgvVehiculos.Rows[dgvVehiculos.CurrentCell.RowIndex].Cells["precioalquiler"].Value.ToString());
            precioVenta.Value = decimal.Parse(dgvVehiculos.Rows[dgvVehiculos.CurrentCell.RowIndex].Cells["precioventa"].Value.ToString());
            if (dgvVehiculos.Rows[dgvVehiculos.CurrentCell.RowIndex].Cells["urlimagen"].Value.ToString() != "")
            {
                WebRequest webreq = WebRequest.Create(dgvVehiculos.Rows[dgvVehiculos.CurrentCell.RowIndex].Cells["urlimagen"].Value.ToString());
                WebResponse webres = webreq.GetResponse();
                Stream stream = webres.GetResponseStream();
                imagen.Image = Image.FromStream(stream);
            }
            else
            {
                imagen.Image= imagen.InitialImage;
            }
        }

        private void SelMat_Click(object sender, EventArgs e)
        {
            frmVehiculos vehiculo = new frmVehiculos();
            vehiculo.MdiParent = this.MdiParent;
            vehiculo.Show();
        }

        private void buttonImprimir_Click_1(object sender, EventArgs e)
        {
            frmImprimir Imprimir = new frmImprimir(dgvVehiculos, "VEHICULOS");
            Imprimir.Show();
        }

        private void buttonXML_Click(object sender, EventArgs e)
        {
            ExportarXML();
        }

        public void ExportarXML()
        {
            saveFileDialog1.FileName = "UACARS vehiculos.xml";
            saveFileDialog1.Filter = "Archivo XML|*.xml";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string path = saveFileDialog1.FileName;
                int numFilas = 0;

                numFilas = dgvVehiculos.Rows.Count;

                DataSet ds = new DataSet("Vehiculos");
                DataTable dt = new DataTable("Vehiculo");

                dt.Columns.Add("marca", Type.GetType("System.String"));

                dt.Columns.Add("modelo", Type.GetType("System.String"));

                dt.Columns.Add("matricula", Type.GetType("System.String"));

                dt.Columns.Add("color", Type.GetType("System.String"));

                dt.Columns.Add("precioalquiler", Type.GetType("System.String"));

                dt.Columns.Add("precioventa", Type.GetType("System.String"));

                dt.Columns.Add("categoria", Type.GetType("System.String"));

                dt.Columns.Add("urlimagen", Type.GetType("System.String"));

                if (numFilas > 0)
                {
                    for (int i = 0; i < numFilas; i++)
                    {
                        DataRow dr;
                        dr = dt.NewRow();

                        dr.BeginEdit();

                        dr["marca"] = dgvVehiculos[1, i].Value.ToString();

                        dr["modelo"] = dgvVehiculos[2, i].Value.ToString();

                        dr["matricula"] = dgvVehiculos[3, i].Value.ToString();

                        dr["color"] = dgvVehiculos[4, i].Value.ToString();

                        dr["preciolaquiler"] = dgvVehiculos[5, i].Value.ToString();

                        dr["precioventa"] = dgvVehiculos[6, i].Value.ToString();

                        dr["categoria"] = dgvVehiculos[7, i].Value.ToString();

                        dr["urlimagen"] = dgvVehiculos[8, i].Value.ToString();

                        dr.EndEdit();

                        dt.Rows.Add(dr);
                    }
                }
                ds.Tables.Add(dt);
                ds.WriteXml(path);
            }
        }

        private void buttonPDF_Click(object sender, EventArgs e)
        {
            PDF pdf = new PDF();
            pdf.generarPDF("frmVehiculos", saveFileDialog1, dgvVehiculos);
        }

        public void ImportarXML()
        {
            DataSet dataSet1 = new DataSet();
            openFileDialog1.FileName = "";
            openFileDialog1.Filter = "Archivo XML|*.xml";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string file = openFileDialog1.FileName;

                if (file.Length > 0)
                {
                    try
                    {
                        dataSet1.ReadXml(file);

                        DataGridView aux = new DataGridView();
                        dgvVehiculos.DataSource = aux.DataSource;
                        dgvVehiculos.DataMember = "";

                        dgvVehiculos.DataSource = dataSet1;
                        dgvVehiculos.DataMember = "vehiculo";

                        System.IO.StringWriter swXML = new System.IO.StringWriter();
                        dataSet1.WriteXmlSchema(swXML);
                    }

                    catch (System.Security.SecurityException ex)
                    {
                        MessageBox.Show("Error al acceder al fichero," + ex.Message, "Error de fichero", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    }
                }
            }
        }

        private void buttonExcel_Click(object sender, EventArgs e)
        {
            Excel();
        }

        public void Excel()
        {
            XML xml = new XML();
            xml.ExportarExcel(dgvVehiculos);
        }
    }
}
